package com.ruoyi.form.service;

import com.ruoyi.common.core.page.MongoPage;
import org.bson.Document;
import org.bson.conversions.Bson;

import java.util.List;
import java.util.Map;

/**
 * @Description：MongoService
 * @Author：LZF
 * @Date：2025-06-28 15:30
 */
public interface IMongoService<T> {
    /**
     * 保存或更新（无entity）
     * @param collectionName
     * @param object 实体对象
     * @date 2025-06-28
     * @author LZF
     */
    public void insertOrUpdate(String collectionName, Document object);
    /**
     * 批量删除
     * @param ids ids
     * @param collectionName
     * @return {@link boolean}
     * @date 2025-06-28
     * @author LZF
     */
    void deleteByIds(List<String> ids, String collectionName);
    void deleteByFilter(Bson filter, String collectionName);

    /**
     * 修改
     * @param collectionName 集合名
     * @param filter 条件
     * @param object 实体对象
     */
    public void saveOrUpdateOne(String collectionName, Bson filter, Map<String, Object> object);
    /**
     * 根据id查询
     * @param id id
     * @param clazz 实体类
     * @param collectionName 集合名
     * @return {@link Document}
     * @date 2025-06-28
     * @author LZF
     */
    Document findOneById(String id, Class<T> clazz, String collectionName);

    /**
     * 根据id查询(无Class)
     * @param id id
     * @param collectionName 集合名
     * @return {@link Document}
     * @date 2025-06-28
     * @author LZF
     */
    Document selectOneById(String id, String collectionName);
    /**
     * 分页查询
     * @param collectionName 集合名
     * @param filter 条件
     * @param sort 排序
     * @param page 分页
     * @return {@link MongoPage}
     * @date 2025-06-28
     * @author LZF
     */
    public MongoPage find(String collectionName, Bson filter, Bson sort, MongoPage page);

    /**
     * mongo查询list数据
     * @param collectionName 集合名
     * @param filter 条件
     * @param sort 排序
     * @return
     */
    public List<Document> find(String collectionName, Bson filter, Bson sort);
}